package com.ermao.controller;

import com.ermao.pojo.result.admin.AdminGlobalResult;
import com.ermao.pojo.result.user.UserInGetInformation;
import com.ermao.service.AdminService;
import com.ermao.utils.CheckValidUtils;
import com.ermao.utils.Result;
import com.ermao.utils.ResultGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 管理员操作控制器
 * @author Ermao
 * Date: 2021/8/31 1:40
 */
@RestController
@RequestMapping("/api/v1/admins")
@CrossOrigin(allowCredentials = "true", originPatterns = "http://localhost:*")
public class AdminController {

	private AdminService adminService;

	@Autowired
	public AdminController(AdminService adminService) {
		this.adminService = adminService;
	}


	/**
	 * 管理员登录
	 * 会在管理员登录成功之后设立 session，并通过 session 进行一定的用户校验，如果后续的 api 请求不带着含有
	 * JSessionID 的 Cookie，就会被拦截
	 * @param accountNumber 管理员帐号
	 * @param password 管理员密码
	 * @param request Http 请求
	 * @return 返回结果对象
	 */
	@PostMapping("/cookies")
	public Result login(@RequestParam("accountNumber") Integer accountNumber,
						@RequestParam("password") String password,
						HttpServletRequest request) {
		if (!CheckValidUtils.checkUser(accountNumber, password)) {
			return ResultGenerator.genFailResult("帐号和密码格式错误");
		}
		if (adminService.login(accountNumber, password)) {
			// 创建会话，并且设置 cookie
			request.getSession();
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("帐号或者密码错误");
		}
	}

	/**
	 * 获取全局信息
	 * @return 返回结果对象
	 */
	@GetMapping("/global")
	public Result login() {
		AdminGlobalResult result = adminService.getGlobalInformation();
		return ResultGenerator.genSuccessResult(result);
	}

	/**
	 * 查询打卡排行榜前几名的人数
	 * @param number 要查看的人数
	 * @return 返回结果对象
	 */
	@GetMapping("/punches/{number}")
	public Result getPunchRank(@PathVariable(value = "number") Integer number) {
		// 处理违规 number
		if (number <= 0) {
			return ResultGenerator.genFailResult("请输入正确的查询数目");
		} else {
			return ResultGenerator.genSuccessResult(adminService.getUsersInPunchRank(number));
		}
	}

	/**
	 * 根据用户帐号查询用户信息
	 * @param accountNumber 用户帐号
	 * @return 返回结果对象
	 */
	@GetMapping("/users/{accountNumber}")
	public Result getUserInfo(@PathVariable("accountNumber") Integer accountNumber) {
		if(!CheckValidUtils.checkAccountNumber(accountNumber)) {
			return ResultGenerator.genFailResult("账号格式错误");
		}
		UserInGetInformation user = adminService.getUserInformationByAccountNumber(accountNumber);
		if (user != null) {
			return ResultGenerator.genSuccessResult(user);
		} else {
			return ResultGenerator.genFailResult("用户不存在");
		}
	}

	/**
	 * 修改用户密码
	 * @param accountNumber 用户帐号
	 * @param newPassword 用户密码
	 * @return 返回结果对象
	 */
	@PutMapping("/users/password")
	public Result modifyUserPassword(@RequestParam("accountNumber") Integer accountNumber,
									 @RequestParam("newPassword") String newPassword) {
		if (!CheckValidUtils.checkPassword(newPassword)) {
			return ResultGenerator.genFailResult("请输入规范的密码");
		}
		if (adminService.updateUserPassword(accountNumber, newPassword)) {
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("修改用户密码失败");
		}
	}

	/**
	 * 修改用户信息昵称
	 * @param userId 用户 id
	 * @param newNickname 新的昵称
	 * @return 返回结果对象
	 */
	@PutMapping("/users/profiles")
	public Result modifyUserInfo(@RequestParam("userId") Integer userId,
								 @RequestParam("newNickname") String newNickname) {
		if (!CheckValidUtils.checkNickname(newNickname)) {
			return ResultGenerator.genFailResult("请输入规范的昵称");
		}
		if (adminService.updateUserNickname(userId, newNickname)) {
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("修改用户密码失败");
		}
	}
}
